<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="${package.Mapper}.${table.mapperName}">
    <#if enableCache>
        <!-- 开启二级缓存 -->
        <KCache type="${cacheClassName}"/>
    </#if>
    <#if baseResultMap>
        <!-- 通用查询映射结果 -->
        <resultMap id="BaseResultMap" type="${package.Entity}.${entity}">
            <#list table.fields as field>
                <#if field.keyFlag><#--生成主键排在第一位-->
                    <id column="${field.name}" property="${field.propertyName}"/>
                </#if>
            </#list>
            <#list table.commonFields as field><#--生成公共字段 -->
                <result column="${field.name}" property="${field.propertyName}"/>
            </#list>
            <#list table.fields as field>
                <#if !field.keyFlag><#--生成普通字段 -->
                    <result column="${field.name}" property="${field.propertyName}"/>
                </#if>
            </#list>
        </resultMap>
    </#if>
    <#if baseColumnList>
        <!-- 通用查询结果列 -->
        <sql id="Base_Column_List">
            <#list table.commonFields as field>
                ${field.columnName}<#if field_has_next>,</#if>
            </#list>
            ${table.fieldNames}
        </sql>
    </#if>
    <sql id="Base_Condition">
        <#list table.fields as field>
            <if test="ent.${field.propertyName}!=null">
                `${field.name}`=${r"#{ent."}${field.propertyName}${r'}'} and
            </if>
        </#list>
    </sql>
    <delete id="deleteWithCond" parameterType="${package.Entity}.${entity}">
        DELETE FROM ${table.name} where
        <include refid="Base_Condition"></include>
    </delete>
    <select id="query" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List"></include>
        from ${table.name}
        <trim prefix="where" suffixOverrides="and">
            <include refid="Base_Condition"></include>
        </trim>
        limit 1
    </select>

    <select id="listWithCond" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List"></include>
        from ${table.name}
        <trim prefix="where" suffixOverrides="and">
            <include refid="Base_Condition"></include>
        </trim>
    </select>
</mapper>